﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using Texfina.Entity.Co;
using Texfina.Core.Data;

namespace Texfina.DOQry.Co
{
    public class DOrdenCompra
    {
        /// <summary>
        /// LLENAR LISTADO DE OC PARA AUTORIZAR
        /// </summary>
        /// <param name="oc"></param>
        /// <returns></returns>
        public static DataSet OrdenCompra_qry01(EOrdenCompra oc)
        {
            DBAccess db = new DBAccess();

            db.AddParameter("@pdte_feordencoini", oc.Fe_ordenco_ini);
            db.AddParameter("@pdte_feordencofin", oc.Fe_ordenco_fin);
            db.AddParameter("@pdte_empresa", oc.Id_Empresa);
            db.AddParameter("@pdte_periodo", oc.Id_periodo);
            db.AddParameter("@pdte_Emitido", oc.strEmitido);
            db.AddParameter("@pdte_Estado", oc.Estado);
            return db.ExecuteDataSet("CO_OrdenCompra_qry01");
        }


        public static DataSet OrdenCompra_qry001(EOrdenCompra oc)
        {
            DBAccess db = new DBAccess();
            db.AddParameter("@pdte_empresa", oc.Id_Empresa);
            db.AddParameter("@pdte_periodo", oc.Id_periodo);

            db.AddParameter("@pdte_Estado", oc.Estado);
            return db.ExecuteDataSet("CO_OrdenCompra_qry001");
        }

        /// <summary>
        /// CARGAR LISTADO DE APROBACIONES DE OC
        /// </summary>
        /// <param name="oc"></param>
        /// <returns></returns>

        public static DataSet OrdenCompra_qry02(EOrdenCompra oc)
        {
            DBAccess db = new DBAccess();

            db.AddParameter("@pdte_feordencoini", oc.Fe_ordenco_ini);
            db.AddParameter("@pdte_feordencofin", oc.Fe_ordenco_fin);
            db.AddParameter("@pdte_empresa", oc.Id_Empresa);
            db.AddParameter("@pdte_periodo", oc.Id_periodo);
            db.AddParameter("@pdte_Emitido", oc.strEmitido);
            db.AddParameter("@pdte_Estado", oc.Estado);

            return db.ExecuteDataSet("CO_OrdenCompra_qry02");
        }


        public static DataSet OrdenCompra_qry002(EOrdenCompra oc)
        {
            DBAccess db = new DBAccess();

            db.AddParameter("@pdte_empresa", oc.Id_Empresa);
            db.AddParameter("@pdte_periodo", oc.Id_periodo);
            db.AddParameter("@pdte_Estado", oc.Estado);

            return db.ExecuteDataSet("CO_OrdenCompra_qry002");
        }


        public static DataSet OrdenCompra_qry03(String idPeriodo, String dsProd, String idProv, String feini, String fefin, String local, String estado)
        {
            DBAccess db = new DBAccess();

            db.AddParameter("@idPeriodo", idPeriodo);
            db.AddParameter("@idOrdenCompra", dsProd);
            db.AddParameter("@dsRazonSoc", idProv);
            db.AddParameter("@fechaIni", feini);
            db.AddParameter("@fechaFin", fefin);
            db.AddParameter("@local", local);
            db.AddParameter("@pdte_Estado", estado);
            return db.ExecuteDataSet("CO_OrdenCompra_qry03");
        }

        /// <summary>
        /// AUTORIZACION DE OC
        /// </summary>
        /// <param name="oc"></param>
        /// <returns></returns>

        public static DataSet OrdenCompra_mnt01(EOrdenCompra oc)
        {
            DBAccess db = new DBAccess();

            db.AddParameter("@psin_typeupd", oc.psin_typeupd);
            db.AddParameter("@pchr_idordenco", oc.Id_ordenco);
            db.AddParameter("@pchr_stordenco", oc.stordenco);
            db.AddParameter("@pchr_idautoriza", oc.Id_autoriza);
            db.AddParameter("@pvch_user", oc.Id_uupdarec);
            db.AddParameter("@pchr_idEmpresa", oc.Id_Empresa);
            db.AddParameter("@pchr_idPeriodo", oc.Id_periodo);


            return db.ExecuteDataSet("CO_OcCambioEstado");
        }
        /// <summary>
        /// APROBACION DE OC
        /// </summary>
        /// <param name="oc"></param>
        /// <returns></returns>

        public static DataSet OrdenCompra_mnt02(EOrdenCompra oc)
        {
            DBAccess db = new DBAccess();

            db.AddParameter("@psin_typeupd", oc.psin_typeupd);
            db.AddParameter("@pchr_idordenco", oc.Id_ordenco);
            db.AddParameter("@pchr_stordenco", oc.stordenco);
            db.AddParameter("@pchr_idautoriza", oc.Id_aprueba);
            db.AddParameter("@pvch_user", oc.Id_uupdarec);
            db.AddParameter("@pchr_idEmpresa", oc.Id_Empresa);
            db.AddParameter("@pchr_idPeriodo", oc.Id_periodo);


            return db.ExecuteDataSet("CO_OcCambioEstado");
        }

        //generar codigo para la OC
        public static IDataReader OrdenCompra_qry03()
        {
            DBAccess db = new DBAccess();

            return db.ExecuteReader("MG_GencodigoComp");
        }

        //Insertar la oc

        public static void OrdenCompra_mnt03(EOrdenCompra oc)
        {
            DBAccess db = new DBAccess();

            db.AddParameter("@pid_periodo", oc.Id_periodo);
            db.AddParameter("@pid_ordenco", oc.Id_ordenco);
            db.AddParameter("@pid_importa", oc.Id_importa);
            db.AddParameter("@pid_cotiza", oc.Id_cotiza);
            db.AddParameter("@pfe_ordenco", oc.Fe_ordenco);
            db.AddParameter("@pfe_entrega", oc.Fe_entrega);
            db.AddParameter("@pid_docucom", oc.Id_docucom);
            db.AddParameter("@pnu_docu", oc.Nu_docu);
            db.AddParameter("@pid_clipro", oc.Id_clipro);
            db.AddParameter("@pid_clipro2", oc.Id_clipro2);
            db.AddParameter("@pid_clipro3", oc.Id_clipro3);
            db.AddParameter("@pid_condpago", oc.Id_condpago);
            db.AddParameter("@pid_personal", oc.Id_personal);
            db.AddParameter("@pid_local", oc.Id_local);
            db.AddParameter("@pid_local2", oc.Id_local2);
            db.AddParameter("@pid_personal2", oc.Id_personal2);
            db.AddParameter("@pds_observa", oc.Ds_observa);
            db.AddParameter("@pid_vmoneda", oc.Id_vmoneda);
            db.AddParameter("@pmt_total", oc.Mt_total);
            db.AddParameter("@pmt_tc", oc.Mt_tc);
            db.AddParameter("@pid_modcomp", oc.Id_modcomp);
            db.AddParameter("@pid_tipcomp", oc.Id_tipcomp);
            db.AddParameter("@pid_prioridad", oc.Id_prioridad);
            db.AddParameter("@pid_aprueba", oc.Id_aprueba);
            db.AddParameter("@pst_aprueba", oc.St_aprueba);
            db.AddParameter("@pid_autoriza", oc.Id_autoriza);
            db.AddParameter("@pst_ordenco", oc.St_ordenco);
            db.AddParameter("@pid_ucrearec", oc.Id_ucrearec);
            db.AddParameter("@pid_uupdarec", oc.Id_uupdarec);
            db.AddParameter("@pst_anulado", oc.St_anulado);
            db.AddParameter("@pid_empresa", oc.Id_Empresa);
            db.AddParameter("@pid_stfactura", oc.stfactura);

            db.ExecuteNonQuery("CO_Ordencompra_mmt01");

        }

        public static EOrdenCompra mObtenerOCompra(EOrdenCompra ocOmpra)
        {
            DBAccess db = new DBAccess();
            db.AddParameter("@pchr_idperiodo", ocOmpra.Id_periodo);
            db.AddParameter("@pchr_idordenco", ocOmpra.Id_ordenco);
            db.AddParameter("@pdte_empresa", ocOmpra.idEmpresa);

            List<EOrdenCompra> result = new List<EOrdenCompra>();
            using (IDataReader rd = db.ExecuteReader("CO_OrdenCompraGetQrt01"))
            {
                while (rd.Read())
                {
                    return mCargarOC(rd);
                }
            }

            return ocOmpra;
        }

        private static EOrdenCompra mCargarOC(IDataReader rdr)
        {
            EOrdenCompra oCompra = new EOrdenCompra();
            oCompra.Id_ordenco = rdr.IsDBNull(rdr.GetOrdinal("id_ordenco")) ? String.Empty : rdr.GetString(rdr.GetOrdinal("id_ordenco"));
            oCompra.Fe_ordenco = rdr.IsDBNull(rdr.GetOrdinal("fe_ordenco")) ? String.Empty : rdr.GetString(rdr.GetOrdinal("fe_ordenco"));
            oCompra.Id_clipro = rdr.IsDBNull(rdr.GetOrdinal("id_clipro")) ? String.Empty : rdr.GetString(rdr.GetOrdinal("id_clipro"));
            oCompra.Id_local = rdr.IsDBNull(rdr.GetOrdinal("id_local")) ? String.Empty : rdr.GetString(rdr.GetOrdinal("id_local"));
            oCompra.Id_personal = rdr.IsDBNull(rdr.GetOrdinal("id_personal")) ? String.Empty : rdr.GetString(rdr.GetOrdinal("id_personal"));
            oCompra.Pedidop = rdr.IsDBNull(rdr.GetOrdinal("pedidop")) ? String.Empty : rdr.GetString(rdr.GetOrdinal("pedidop"));
            oCompra.Id_local2 = rdr.IsDBNull(rdr.GetOrdinal("id_local2")) ? String.Empty : rdr.GetString(rdr.GetOrdinal("id_local2"));
            oCompra.Id_personal2 = rdr.IsDBNull(rdr.GetOrdinal("id_personal2")) ? String.Empty : rdr.GetString(rdr.GetOrdinal("id_personal2"));
            oCompra.Emitidap = rdr.IsDBNull(rdr.GetOrdinal("emitidap")) ? String.Empty : rdr.GetString(rdr.GetOrdinal("emitidap"));
            oCompra.Id_prioridad = rdr.IsDBNull(rdr.GetOrdinal("id_prioridad")) ? String.Empty : rdr.GetString(rdr.GetOrdinal("id_prioridad"));
            oCompra.Ds_observa = rdr.IsDBNull(rdr.GetOrdinal("ds_observa")) ? String.Empty : rdr.GetString(rdr.GetOrdinal("ds_observa"));
            oCompra.Id_condpago = rdr.IsDBNull(rdr.GetOrdinal("id_condpago")) ? String.Empty : rdr.GetString(rdr.GetOrdinal("id_condpago"));

            oCompra.dsCondPago = rdr.IsDBNull(rdr.GetOrdinal("condpago")) ? String.Empty : rdr.GetString(rdr.GetOrdinal("condpago"));

            oCompra.Id_tipcomp = rdr.IsDBNull(rdr.GetOrdinal("id_tipcomp")) ? String.Empty : rdr.GetString(rdr.GetOrdinal("id_tipcomp"));
            oCompra.Id_modcomp = rdr.IsDBNull(rdr.GetOrdinal("id_modcomp")) ? String.Empty : rdr.GetString(rdr.GetOrdinal("id_modcomp"));
            oCompra.Id_importa = rdr.IsDBNull(rdr.GetOrdinal("id_importa")) ? String.Empty : rdr.GetString(rdr.GetOrdinal("id_importa"));
            oCompra.Id_vmoneda = rdr.IsDBNull(rdr.GetOrdinal("id_vmoneda")) ? String.Empty : rdr.GetString(rdr.GetOrdinal("id_vmoneda"));
            oCompra.Mt_tc = rdr.IsDBNull(rdr.GetOrdinal("mt_tc")) ? 0 : rdr.GetDecimal(rdr.GetOrdinal("mt_tc"));
            oCompra.Fe_entrega = rdr.IsDBNull(rdr.GetOrdinal("fe_entrega")) ? String.Empty : rdr.GetString(rdr.GetOrdinal("fe_entrega"));
            oCompra.Mt_total = rdr.IsDBNull(rdr.GetOrdinal("mt_total")) ? 0 : rdr.GetDecimal(rdr.GetOrdinal("mt_total"));

            return oCompra;
        }

        public static EOrdenCompra mObtenerOCompra_(EOrdenCompra ocOmpra) //obtiene la consulta de factura
        {
            DBAccess db = new DBAccess();
            db.AddParameter("@pchr_idperiodo", ocOmpra.Id_periodo);
            db.AddParameter("@pchr_idordenco", ocOmpra.Id_ordenco);
            db.AddParameter("@pdte_empresa", ocOmpra.idEmpresa);

            List<EOrdenCompra> result = new List<EOrdenCompra>();
            using (IDataReader rd = db.ExecuteReader("CO_OrdenCompraGetQrt01"))
            {
                while (rd.Read())
                {
                    return mCargarOC_(rd);
                }
            }

            return ocOmpra;
        }

        private static EOrdenCompra mCargarOC_(IDataReader rdr) // consulta para cargar la factura
        {
            EOrdenCompra oCompra = new EOrdenCompra();
            oCompra.Id_ordenco = rdr.IsDBNull(rdr.GetOrdinal("id_ordenco")) ? String.Empty : rdr.GetString(rdr.GetOrdinal("id_ordenco"));
            oCompra.Fe_ordenco = rdr.IsDBNull(rdr.GetOrdinal("fe_ordenco")) ? String.Empty : rdr.GetString(rdr.GetOrdinal("fe_ordenco"));
            oCompra.Id_clipro = rdr.IsDBNull(rdr.GetOrdinal("id_clipro")) ? String.Empty : rdr.GetString(rdr.GetOrdinal("id_clipro"));
            oCompra.Ds_observa = rdr.IsDBNull(rdr.GetOrdinal("ds_observa")) ? String.Empty : rdr.GetString(rdr.GetOrdinal("ds_observa"));
            oCompra.Mt_total = rdr.IsDBNull(rdr.GetOrdinal("mt_total")) ? 0 : rdr.GetDecimal(rdr.GetOrdinal("mt_total"));
            return oCompra;
        }
    }

}
